{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据处理API完整测试笔记本\n",
    "\n",
    "本笔记本用于测试数据处理API的各种功能，包括：\n",
    "- pretrain格式数据测试\n",
    "- SFT格式数据测试\n",
    "- DPO格式数据测试\n",
    "- KTO格式数据测试\n",
    "\n",
    "\n",
    "## 使用说明\n",
    "1. 运行start_api.py API客户端\n",
    "2. 在后续单元格中设置要测试的功能和参数\n",
    "3. 运行测试并查看结果\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ API服务器运行正常\n",
      "\n",
      "============================================================\n",
      "数据处理API完整测试开始\n",
      "============================================================\n"
     ]
    }
   ],
   "source": [
    "# 导入必要的库\n",
    "import json\n",
    "import sys\n",
    "import os\n",
    "import time\n",
    "\n",
    "# 添加项目路径\n",
    "sys.path.insert(0, os.path.dirname(os.path.abspath('.')))\n",
    "\n",
    "# 通过离线包导入requests\n",
    "from src.common_utils import safe_import\n",
    "requests, error_msg = safe_import('requests')\n",
    "\n",
    "if requests is None:\n",
    "    raise ImportError(f\"无法从离线包导入requests: {error_msg}\")\n",
    "\n",
    "# API服务器配置\n",
    "API_BASE_URL = \"http://localhost:5000\"\n",
    "\n",
    "# 响应处理函数\n",
    "def print_response(response, title=\"API响应\"):\n",
    "    \"\"\"打印API响应结果\"\"\"\n",
    "    print(f\"\\n{'=' * 50}\")\n",
    "    print(title)\n",
    "    print(\"=\" * 50)\n",
    "    \n",
    "    if response.status_code == 200:\n",
    "        data = response.json()\n",
    "        if data.get('success'):\n",
    "            print(\"✅ 请求成功\")\n",
    "            if 'message' in data:\n",
    "                print(f\"📝 消息: {data['message']}\")\n",
    "            if 'data' in data:\n",
    "                print(\"📊 数据:\")\n",
    "                print(json.dumps(data['data'], ensure_ascii=False, indent=2))\n",
    "        else:\n",
    "            print(\"❌ 请求失败\")\n",
    "            print(f\"错误: {data.get('error', '未知错误')}\")\n",
    "    else:\n",
    "        print(f\"❌ HTTP错误: {response.status_code}\")\n",
    "        print(f\"响应: {response.text}\")\n",
    "\n",
    "# 检查API服务器状态\n",
    "try:\n",
    "    health_response = requests.get(f\"{API_BASE_URL}/api/v1/health\")\n",
    "    if health_response.status_code == 200 and health_response.json().get('success'):\n",
    "        print(\"✅ API服务器运行正常\")\n",
    "    else:\n",
    "        print(\"⚠️  API服务器响应异常\")\n",
    "except requests.exceptions.ConnectionError:\n",
    "    print(\"⚠️  API服务器未运行，请先启动服务器: python start_api.py\")\n",
    "\n",
    "print(\"\\n\" + \"=\" * 60)\n",
    "print(\"数据处理API完整测试开始\")\n",
    "print(\"=\" * 60)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 字符清洗算子\n",
    "\n",
    "1. 不可见字符清理 (remove_invisible_chars)\n",
    "   - 移除零宽字符：\\u200B-\\u200F, \\u202A-\\u202E, \\u2060-\\u206F, \\uFEFF\n",
    "   - 清理控制字符：\\u0000-\\u0008, \\u000B, \\u000C, \\u000E-\\u001F, \\u007F-\\u009F\n",
    "   - 处理BOM标记和不间断空格：\\uFEFF, \\u00A0\n",
    "   - 保留制表符、换行符、回车符和普通空格\n",
    "\n",
    "2. Unicode标准化 (unicode_normalize)\n",
    "   - NFC标准化形式转换，统一字符编码\n",
    "   - 解决组合字符显示不一致问题\n",
    "   示例：\"café\" (组合字符) → \"café\" (标准化字符)\n",
    "   \n",
    "3. 繁体转简体 (convert_traditional_to_simplified)\n",
    "   - 基于OpenCC的智能繁简转换\n",
    "   - 支持地区化词汇转换（港澳台、大陆）\n",
    "   - 安全导入机制，依赖库不可用时跳过处理\n",
    "   \n",
    "4. HTML标签清理 (remove_html_tags)\n",
    "   - 基于BeautifulSoup的安全HTML解析\n",
    "   - 保留文本内容，移除所有标签和属性\n",
    "   - 处理HTML实体：&lt; &gt; &amp; &quot; &apos; &nbsp; &copy; &reg; &trade;\n",
    "   - BeautifulSoup不可用时使用正则表达式回退方案\n",
    "   \n",
    "5. Markdown格式清理 (remove_markdown_syntax)\n",
    "   - 移除Markdown标题标记：# ## ### 等（行首和行中）\n",
    "   - 清理图片语法：![alt](url) → alt（优先处理）\n",
    "   - 清理链接语法：[text](url) → text\n",
    "   - 移除代码块标记：```code``` → code\n",
    "   - 清理强调语法：**bold** *italic* ~~strikethrough~~ → bold italic strikethrough\n",
    "   - 处理列表标记：- * + 和数字列表（行首和行中）\n",
    "   - 移除引用标记：> 开头\n",
    "   - 移除表格语法：| 分隔符和表格分隔线\n",
    "   - 移除水平分隔线：--- *** ___\n",
    "   - 清理独立URL链接：http/https/ftp/www链接\n",
    "   \n",
    "6. 装饰符号删除 (remove_decorative_symbols)\n",
    "   - 表情符号范围：\\U0001F600-\\U0001F64F（表情符号）\n",
    "   - 符号和象形文字：\\U0001F300-\\U0001F5FF\n",
    "   - 交通和地图符号：\\U0001F680-\\U0001F6FF\n",
    "   - 国旗符号：\\U0001F1E0-\\U0001F1FF\n",
    "   - 补充符号：\\U0001F900-\\U0001F9FF, \\U0001FA70-\\U0001FAFF\n",
    "   - 几何形状扩展：\\U0001F780-\\U0001F7FF\n",
    "   - 补充箭头：\\U0001F800-\\U0001F8FF\n",
    "   - 杂项符号和装饰符号：\\U00002600-\\U000027BF（星座、棋类、天气等）\n",
    "   - 几何符号：\\U000025A0-\\U000025FF\n",
    "   - 音乐符号：\\U0001D100-\\U0001D1FF（装饰性音乐符号）\n",
    "   - 字母类符号：\\U00002100-\\U0000214F（商标™、电话℡等装饰性符号）\n",
    "   - 版权符号：©（\\u00A9）、®（\\u00AE）\n",
    "   - 变体选择符：\\uFE0F（表情符号样式）、\\uFE00-\\uFE0E\n",
    "   - 分类原则：处理具有图片/图标特征的符号，保留文本形式的实用符号\n",
    "   \n",
    "7. 个人信息打码 (mask_personal_info)\n",
    "   - 手机号打码：1[3-9]\\d{9} → 前3位+****+后4位\n",
    "   - 邮箱打码：user@domain.com → 首字符+***+@domain.com\n",
    "   - 身份证号打码：18位（前6位+********+后4位，屏蔽出生日期8位）\n",
    "   \n",
    "8. 银行卡号打码 (mask_bank_cards)\n",
    "   - 支持9种主流银行卡格式：\n",
    "     - Visa：16位（4开头）、13位（旧版）\n",
    "     - 万事达：16位（51-55开头）\n",
    "     - 银联：16-19位（62开头）\n",
    "     - 美国运通：15位（34/37开头）\n",
    "     - JCB：16位（3528-3589开头）\n",
    "     - 大来卡：14位（300-305开头）\n",
    "     - 大来国际：14位（36开头）\n",
    "     - Discover：16位（6011开头）\n",
    "   - 安全打码：保留前4位和后4位，中间用星号替代\n",
    "   - 适应中文环境，不使用单词边界匹配\n",
    "   \n",
    "9. 网络标识符打码 (mask_network_identifiers) [整合功能]\n",
    "   - MAC地址：AA:BB:CC:DD:EE:FF、AA-BB-CC-DD-EE-FF格式 → [MAC已打码]\n",
    "   - IP端口组合：IPv4:port、[IPv6]:port → [IP端口已打码]\n",
    "   - 子网掩码：CIDR格式（x.x.x.x/xx） → [子网掩码已打码]\n",
    "   - IPv4地址：严格两阶段验证（宽松匹配+严格验证） → [IP已打码]\n",
    "     - 排除版本号等非IP数字组合\n",
    "     - 验证每个八位组范围（0-255）和前导零\n",
    "   - IPv6地址：完整、压缩、IPv4映射格式 → [IPv6已打码]\n",
    "     - 支持区域标识符（%符号）\n",
    "     - 严格验证十六进制段和格式\n",
    "   \n",
    "10. 网络凭证打码 (mask_network_credentials)\n",
    "    - 证书序列号：冒号分隔的十六进制序列 → [证书序列号已打码]\n",
    "    - 证书指纹：基于上下文关键词识别（thumbprint/fingerprint/cert）\n",
    "      - SHA1（40位）、SHA256（64位）、SHA384（96位）、SHA512（128位）\n",
    "    - 密码哈希：MD5（32位）、SHA系列、bcrypt格式 → [密码哈希已打码]\n",
    "      - 排除证书指纹等其他十六进制内容\n",
    "      - 基于上下文关键词（hash/md5/sha）识别\n",
    "     \n",
    "11. 中英文标点符号转换 (normalize_punctuation)\n",
    "    - 英文标点转中文：, . ; : ! ? → ，。；：！？\n",
    "    - 括号转换：() → （）\n",
    "    - 连字符转换：- → —（破折号）\n",
    "    - 省略号转换：... → …\n",
    "    - 引号智能转换：\"content\" → \"content\"、' → '\n",
    " \n",
    "12. 空白字符清理 (remove_whitespace_chars)\n",
    "    - 删除空格、制表符、换行符、回车符等所有空白字符\n",
    "    - 正则表达式：[ \\t\\n\\r]+\n",
    "    - 用于文本紧凑化处理，移除格式化空白\n",
    "    - 执行顺序：作为最后一步执行，确保前面处理产生的空白也被清理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "### CharacterCleanerConfig (字符清洗配置)\n",
    "\n",
    "| 参数 | 类型 | 默认值 | 说明 |\n",
    "|:---|:---|:---|:---|\n",
    "| `enable_invisible_chars_removal` | `bool` | `False` | **文本标准化处理**：去除制表符、换行符之外的不可见字符。 |\n",
    "| `enable_unicode_normalize` | `bool` | `False` | **文本标准化处理**：将文本标准化为NFKC格式，以统一字符表示。 |\n",
    "| `enable_traditional_convert` | `bool` | `False` | **文本标准化处理**：将繁体中文转换为简体中文。 |\n",
    "| `enable_html_removal` | `bool` | `False` | **内容格式清理**：去除文本中的HTML标签，如 `<div>`, `<p>` 等。 |\n",
    "| `enable_markdown_removal` | `bool` | `False` | **内容格式清理**：去除文本中的Markdown格式符号，如 `*`, `#` 等。 |\n",
    "| `enable_decorative_symbols_removal`| `bool` | `False` | **内容格式清理**：删除文本中的装饰性符号，如 `★`, `♪` 等。 |\n",
    "| `enable_personal_info_masking` | `bool` | `False` | **个人隐私信息打码**：对姓名、地址、电话号码等个人信息进行打码处理。 |\n",
    "| `enable_bank_card_masking` | `bool` | `False` | **个人隐私信息打码**：对银行卡号进行打码处理。 |\n",
    "| `enable_network_identifiers_masking`| `bool` | `False` | **网络隐私信息打码**：对IP地址、MAC地址等网络标识符进行打码。 |\n",
    "| `enable_network_credentials_masking`| `bool` | `False` | **网络隐私信息打码**：对网络凭证（如密码、API密钥）进行打码。 |\n",
    "| `enable_punctuation_normalize` | `bool` | `False` | **标点符号标准化**：将全角标点符号（如 `，`、`。`）转换为半角（如 `,`, `.`）。 |\n",
    "| `enable_whitespace_removal` | `bool` | `False` | **空白字符删除**：删除多余的空白字符，包括空格、制表符和换行符。 |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### pretrain格式字符清理功能测试\n",
    "\n",
    "测试pretrain格式数据的字符清理功能。\n",
    "\n",
    "**JSON格式说明**:\n",
    "```json\n",
    "[\n",
    "  {\"text\": \"document\"},\n",
    "  {\"text\": \"document\"}\n",
    "]\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "============================================================\n",
      "pretrain格式数据字符清理测试\n",
      "============================================================\n",
      "\n",
      "==================================================\n",
      "批量文本字符清理结果\n",
      "==================================================\n",
      "✅ 请求成功\n",
      "📝 消息: JSON字段清洗完成，处理了108个条目，108个字段\n",
      "📊 数据:\n",
      "{\n",
      "  \"cleaned_data\": [\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"重要内容特别提醒注意事项核心要点关键信息重点说明\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始内容结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello World English Text\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是简体中文文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"繁体中文转换测试：学习、发展、环境、经济、国际、专业、标准、优秀\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"繁体繁体繁体繁体繁体\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始内容中间内容结束内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"标题段落1项目1项目2\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"标题\\n子标题\\n粗体斜体\\n行内代码\\npython\\nprint('hello')\\n引用内容\\n列表项\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"未闭合粗体\\n未闭合斜体\\n未闭合代码块\\n正常文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一段普通的文本内容，没有任何个人信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"联系人：张三，手机：138****5678，邮箱：z****@example.com，身份证：110101********1234\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"手机号码：8613812345678和138 1234 5678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"无效身份证：12345678901234567890和1234567890123456\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"邮箱：t***@example.com\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"网址：\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"电话：138****5678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本正常文本正常文本正常文本正常文本结束文本结束文本结束文本结束文本结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"有效文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本A\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"重复文本1\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本包含特殊字符!@$%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个非常长的文本内容，用于测试MD5去重功能在处理长文本时的性能和准确性，包含了各种标点符号和数字123456789。\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"one\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是中等长度的文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"A\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"合适长度\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hi\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello 世界\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Today is sunny\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"我喜欢吃苹果\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好，适合出门\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好下雨了\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"唯一句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"非空内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个超长文本重复内容重复内容重复内容重复内容重复内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试emoji和特殊字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试控制字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"中等长度\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个很长的句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"a\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"ab\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"中文English123\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"纯中文内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Pure English content\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"123456789\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个测试句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"This is a test sentence\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"混合language测试case\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"任意文本1\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"包含特殊字符!@$%^&()\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"包含emoji字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"电话：138****5678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"普通文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"！@￥%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"...\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好 \\t\\n\\r 世界 \\t\\n\\r 测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好 世界 测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好 \\t\\n世界 \\r 测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"欢迎 来到 我们的 商店\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数据\\t处理\\t系统\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"第一行\\n第二行\\n第三行\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始\\r中间\\r结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本 \\t\\n\\r 处理 \\t\\n\\r 完成\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"项目 管理 系统\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"学习 \\t\\n编程 \\r 技术\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello World 123\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"éñü\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试测试测试测试测试éééééé\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \",.!?;:()[]{}\\\"'...—%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"真的吗???!!!...\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello, 世界! How are you? 你好吗?\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"   \\t\\t\\t   \\n\\n\\n   \\r\\r\\r   \"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始 结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本正常文本正常文本正常文本正常文本结束文本结束文本结束文本结束文本结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"手机号138****5678，手机号138****5678，手机号138****5678，手机号138****5678，手机号138****5678，\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"null\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"12345\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"True\"\n",
      "    }\n",
      "  ],\n",
      "  \"format\": \"pretrain\",\n",
      "  \"original_data\": [\n",
      "    {\n",
      "      \"text\": \"★☆♠♣♥♦♪♫♬\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"★重要★内容☆特别☆提醒♠注意♠事项♣核心♣要点♥关键♥信息♦重点♦说明\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"★开始内容结束☆\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello World English Text\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是简体中文文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"繁体中文轉換測試：學習、發展、環境、經濟、國際、專業、標準、優秀\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"繁體繁體繁體繁體繁體\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"<div><span><p></p></span></div>\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"<script>alert('xss')</script><div>正常内容</div>\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"<div>开始内容<span未闭合>中间内容</div>结束内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"<html><head><title>标题</title></head><body><div class='container'><p>段落1</p><ul><li>项目1</li><li>项目2</li></ul></div></body></html>\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"# ## ### #### ##### ###### ***** _____ ``` ~~~ --- ===\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"# 标题\\n## 子标题\\n**粗体*斜体***\\n`行内代码`\\n```python\\nprint('hello')\\n```\\n> 引用内容\\n- 列表项\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"**未闭合粗体\\n*未闭合斜体\\n```未闭合代码块\\n正常文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一段普通的文本内容，没有任何个人信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"联系人：张三，手机：13812345678，邮箱：zhang@example.com，身份证：110101199001011234\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"手机号码：+86-138-1234-5678和138 1234 5678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"无效身份证：12345678901234567890和1234567890123456\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"邮箱：test@example.com\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"网址：https://www.example.com\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"电话：138-1234-5678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本正常文本正常文本正常文本正常文本​​​​​结束文本结束文本结束文本结束文本结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"有效文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本A\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"重复文本1\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本包含特殊字符!@#$%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个非常长的文本内容，用于测试MD5去重功能在处理长文本时的性能和准确性，包含了各种标点符号和数字123456789。\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"one\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是中等长度的文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"A\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"合适长度\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hi\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello 世界\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Today is sunny\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"我喜欢吃苹果\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好，适合出门\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"今天天气很好下雨了\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"唯一句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"非空内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个超长文本重复内容重复内容重复内容重复内容重复内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试🎉emoji和特殊字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试\\u0000\\u0001\\u0002控制字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"中等长度\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个很长的句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"a\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"ab\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"中文English123\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"纯中文内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Pure English content\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"123456789\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一个测试句子\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"This is a test sentence\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"混合language测试case\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"任意文本1\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"包含特殊字符!@#$%^&*()\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"包含emoji🎉字符\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"电话：13812345678\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"普通文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"！@#￥%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"...\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好 \\t\\n\\r 世界 \\t\\n\\r 测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好    世界    测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"你好 \\t\\n 世界 \\r 测试\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"欢迎 来到 我们的 商店\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数据\\t处理\\t系统\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"第一行\\n第二行\\n第三行\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始\\r中间\\r结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本 \\t\\n\\r 处理 \\t\\n\\r 完成\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"项目     管理     系统\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"学习 \\t\\n 编程 \\r 技术\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"​‌‍﻿\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本​​​​​​​​​​结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始­͏؜᠎​‌‍⁠﻿结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello World 123\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"é̂ñ̃ü̈\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"测试测试测试测试测试éééééé\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \",.!?;:()[]{}\\\"'...-—%\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"真的吗???!!!...---\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"Hello, 世界! How are you? 你好吗?\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"   \\t\\t\\t   \\n\\n\\n   \\r\\r\\r   \"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"文本               　内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"开始                    结束\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常文本正常文本正常文本正常文本正常文本​​​​​结束文本结束文本结束文本结束文本结束文本\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"<div><div><div><div><div>内容</div></div></div></div></div>\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"手机号13812345678，手机号13812345678，手机号13812345678，手机号13812345678，手机号13812345678，\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"null\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"12345\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"True\"\n",
      "    }\n",
      "  ],\n",
      "  \"processed_fields\": 108,\n",
      "  \"stats\": {\n",
      "    \"bank_cards_masked\": 0,\n",
      "    \"decorative_symbols_removed\": 5,\n",
      "    \"html_tags_removed\": 5,\n",
      "    \"invisible_chars_removed\": 8,\n",
      "    \"ip_addresses_masked\": 0,\n",
      "    \"markdown_cleaned\": 16,\n",
      "    \"network_config_masked\": 0,\n",
      "    \"network_credentials_masked\": 0,\n",
      "    \"network_identifiers_masked\": 0,\n",
      "    \"personal_info_masked\": 5,\n",
      "    \"punctuation_normalized\": 0,\n",
      "    \"traditional_converted\": 2,\n",
      "    \"unicode_normalized\": 0\n",
      "  },\n",
      "  \"total_items\": 108\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "# 加载pretrain测试数据\n",
    "with open('test_data/pretrain.json', 'r', encoding='utf-8') as f:\n",
    "    pretrain_data = json.load(f)\n",
    "\n",
    "# 字符清理配置\n",
    "pretrain_config = {\n",
    "    \"enable_invisible_chars_removal\": True,\n",
    "    \"enable_unicode_normalize\": True,\n",
    "    \"enable_traditional_convert\": True,\n",
    "    \"enable_html_removal\": True,\n",
    "    \"enable_markdown_removal\": True,\n",
    "    \"enable_decorative_symbols_removal\": True,\n",
    "    \"enable_personal_info_masking\": True,\n",
    "    \"enable_bank_card_masking\": True,\n",
    "    \"enable_network_identifiers_masking\": True,\n",
    "    \"enable_network_credentials_masking\": True,\n",
    "    \"enable_punctuation_normalize\": False,\n",
    "    \"enable_whitespace_removal\": False\n",
    "}\n",
    "\n",
    "# 测试pretrain格式数据清理\n",
    "print(\"\\n\" + \"=\" * 60)\n",
    "print(\"pretrain格式数据字符清理测试\")\n",
    "print(\"=\" * 60)\n",
    "\n",
    "\n",
    "response = requests.post(\n",
    "    f\"{API_BASE_URL}/api/v1/character/clean\",\n",
    "    json={\n",
    "        \"data\": pretrain_data,\n",
    "        \"format\": \"pretrain\",\n",
    "        \"config\": pretrain_config\n",
    "    }\n",
    ")\n",
    "print_response(response, \"批量文本字符清理结果\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SFT格式数据字符清理测试\n",
    "\n",
    "测试SFT（Supervised Fine-Tuning）格式数据的字符清理功能。\n",
    "SFT格式包含instruction、input、output、system字段。\n",
    "\n",
    "**JSON格式说明**:\n",
    "```json\n",
    "[\n",
    "  {\n",
    "    \"instruction\": \"今天的天气怎么样？\",\n",
    "    \"input\": \"\",\n",
    "    \"output\": \"今天的天气不错，是晴天。\",\n",
    "    \"history\": [\n",
    "      [\n",
    "        \"今天会下雨吗？\",\n",
    "        \"今天不会下雨，是个好天气。\"\n",
    "      ],\n",
    "      [\n",
    "        \"今天适合出去玩吗？\",\n",
    "        \"非常适合，空气质量很好。\"\n",
    "      ]\n",
    "    ]\n",
    "  }\n",
    "]\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DPO格式数据字符清理测试\n",
    "\n",
    "测试DPO（Direct Preference Optimization）格式数据的字符清理功能。\n",
    "DPO格式包含instruction、input、chosen、rejected字段。\n",
    "\n",
    "**JSON格式说明**:\n",
    "```json\n",
    "[\n",
    "  {\n",
    "    \"instruction\": \"人类指令（必填）\",\n",
    "    \"input\": \"人类输入（选填）\",\n",
    "    \"chosen\": \"优质回答（必填）\",\n",
    "    \"rejected\": \"劣质回答（必填）\"\n",
    "  }\n",
    "]\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "DPO格式数据清理结果\n",
      "==================================================\n",
      "✅ 请求成功\n",
      "📝 消息: JSON字段清洗完成，处理了50个条目，190个字段\n",
      "📊 数据:\n",
      "{\n",
      "  \"cleaned_data\": [\n",
      "    {\n",
      "      \"chosen\": \"我立即为你进行银行卡号脱敏处理：62227890。这样既保护了敏感信息，又保留了卡号的基本特征用于识别。我的卡号是4111********1111。\",\n",
      "      \"input\": \"我的银行卡号是6222********7890\",\n",
      "      \"instruction\": \"银行卡信息需要保护\",\n",
      "      \"rejected\": \"银行卡号没关系，可以随便说。我的卡号是6222***********0123，CVV是456，有效期12/25。更多信息\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你保护网络配置信息。处理后：服务器IP是[IP已打码]，MAC地址[MAC已打码]。这样确保了网络安全信息不会泄露。我的服务器IP是[IP已打码]，端口8080。\",\n",
      "      \"input\": \"服务器IP是[IP已打码]，MAC地址[MAC已打码]\",\n",
      "      \"instruction\": \"网络配置信息需要保密\",\n",
      "      \"rejected\": \"内网IP没什么关系，可以公开。我的服务器配置：IP [IP已打码]，MAC地址[MAC已打码]，SSH密钥fingerprint: SHA256:abcd1234。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来处理证书敏感信息。处理后：证书指纹：[证书序列号已打码]。这样保护了证书的安全信息，防止被恶意利用。\",\n",
      "      \"input\": \"证书指纹：[密码哈希已打码]\",\n",
      "      \"instruction\": \"证书信息需要脱敏\",\n",
      "      \"rejected\": \"证书指纹是公开信息，不需要隐藏。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"好的，我来帮你清理文本中的不可见字符。这些零宽字符和BOM标记会影响文本显示和处理，清理后文本会更加规范。\",\n",
      "      \"input\": \"正常文本隐藏字符结束\",\n",
      "      \"instruction\": \"请帮我清理这段文本中的不可见字符\",\n",
      "      \"rejected\": \"这些字符看起来没什么问题啊，不需要处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"这是Unicode标准化问题。第一个使用组合字符，第二个使用预组合字符。我可以帮你统一为NFC标准化形式，确保显示一致。\",\n",
      "      \"input\": \"café和café显示不一样\",\n",
      "      \"instruction\": \"如何处理Unicode编码不统一的问题？\",\n",
      "      \"rejected\": \"这两个看起来一样啊，没有区别。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"当然可以！我使用OpenCC进行智能繁简转换：繁体中文转换测试：学习、发展、环境。这样转换后更符合简体中文的表达习惯。\",\n",
      "      \"input\": \"繁体中文转换测试：学习、发展、环境\",\n",
      "      \"instruction\": \"能帮我把繁体字转换成简体字吗？\",\n",
      "      \"rejected\": \"繁体字挺好的，为什么要转换？\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你清理HTML标签和潜在的XSS代码。清理后的纯文本内容是：重要内容。这样既保留了有用信息，又确保了安全性。\",\n",
      "      \"input\": \"重要内容\",\n",
      "      \"instruction\": \"这个网页代码怎么清理？\",\n",
      "      \"rejected\": \"直接复制粘贴就行了，不用特别处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你清理Markdown语法。转换后的纯文本是：标题 粗体内容 代码。这样去除了所有格式标记，保留了核心内容。\",\n",
      "      \"input\": \"标题\\n粗体内容代码\",\n",
      "      \"instruction\": \"Markdown格式的文档如何转换为纯文本？\",\n",
      "      \"rejected\": \"Markdown格式挺清晰的，不需要转换。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以帮你移除这些装饰性符号。清理后的文本是：重要通知内容。这样文本更简洁，适合进一步处理。\",\n",
      "      \"input\": \"重要通知内容\",\n",
      "      \"instruction\": \"文档中有很多装饰符号，怎么处理？\",\n",
      "      \"rejected\": \"这些符号很有趣，应该保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你进行隐私脱敏处理。处理后：联系人张三，手机1385678，邮箱z@example.com。这样既保护了隐私，又保留了基本格式。我的手机是159****5678，邮箱a****@company.com。\",\n",
      "      \"input\": \"联系人张三，手机138****5678，邮箱z****@example.com\",\n",
      "      \"instruction\": \"文档中包含个人信息，需要脱敏处理\",\n",
      "      \"rejected\": \"这些信息都是公开的，不需要处理。我的联系方式：手机188****8888，邮箱t***@domain.com，身份证110101********1111。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你统一标点符号格式。标准化后：你好，世界！这是测试。这样符合中文标点符号的使用规范。\",\n",
      "      \"input\": \"你好,世界!这是测试.\",\n",
      "      \"instruction\": \"标点符号格式不统一怎么办？\",\n",
      "      \"rejected\": \"标点符号混用也没关系，能看懂就行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来清理多余的空白字符。处理后：文本处理测试。这样文本更加紧凑，便于后续处理和存储。\",\n",
      "      \"input\": \"文本 \\t\\n处理 \\r 测试\",\n",
      "      \"instruction\": \"文本中有多余的空白字符\",\n",
      "      \"rejected\": \"空格多一点少一点无所谓。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用MD5哈希算法检测重复内容。如果这段文本之前出现过，我会将其标记为重复并过滤掉，确保数据的唯一性。\",\n",
      "      \"input\": \"今天天气很好\",\n",
      "      \"instruction\": \"如何去除重复的文本内容？\",\n",
      "      \"rejected\": \"重复就重复吧，多一些内容也不错。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用jieba分词分析重复率。这段文本重复率过高，建议过滤掉。高质量的文本应该有更丰富的词汇和表达。\",\n",
      "      \"input\": \"好好好好好好好好好好\",\n",
      "      \"instruction\": \"文本重复率太高怎么处理？\",\n",
      "      \"rejected\": \"重复一点没关系，表达强烈情感。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用Ngram相似度算法检测文本相似性。通过分析词汇组合的重叠程度，可以识别出语义相近的文本，避免数据冗余。\",\n",
      "      \"input\": \"我喜欢吃苹果\",\n",
      "      \"instruction\": \"如何检测相似的文本？\",\n",
      "      \"rejected\": \"相似的文本也有价值，不应该删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以根据关键词进行内容过滤。如果设置过滤'广告'关键词，这类内容会被识别并处理，确保内容质量。\",\n",
      "      \"input\": \"这是广告推广内容\",\n",
      "      \"instruction\": \"需要过滤包含特定关键词的内容\",\n",
      "      \"rejected\": \"广告内容也是信息，应该保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到这个文本过短（只有1个字符）。根据长度过滤规则，过短的文本通常信息量不足，建议过滤掉。\",\n",
      "      \"input\": \"短\",\n",
      "      \"instruction\": \"文本长度不合适怎么办？\",\n",
      "      \"rejected\": \"短小精悍也是一种美。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到这个文本过长（超过设定阈值）。超长文本可能包含冗余信息或格式问题，建议进行长度控制或分段处理。\",\n",
      "      \"input\": \"这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的文本内容\",\n",
      "      \"instruction\": \"如何处理超长文本？\",\n",
      "      \"rejected\": \"内容丰富一点有什么不好？\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来进行综合清理：去除不可见字符、清理HTML标签、处理Markdown语法。清理后：混乱文本HTML markdown。\",\n",
      "      \"input\": \"混乱文本HTMLmarkdown\",\n",
      "      \"instruction\": \"请帮我清理这段混乱的文本\",\n",
      "      \"rejected\": \"这样的混合格式挺有特色的。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"批量处理时我会保持一致的清理标准，统计处理效果，并提供详细的处理报告。这样确保所有文本都得到统一的高质量处理。\",\n",
      "      \"input\": \"文本1\\n文本2\\n文本3\",\n",
      "      \"instruction\": \"批量处理多个文本时要注意什么？\",\n",
      "      \"rejected\": \"一个一个处理就行了，不用批量。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我会提供详细的统计报告：处理文本数量、各类清理操作的执行次数、过滤效果等。这些指标帮助评估清洗质量和效果。\",\n",
      "      \"instruction\": \"数据清洗后如何评估效果？\",\n",
      "      \"rejected\": \"处理完就完了，不需要什么报告。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"文本预处理是数据清洗的重要环节，包括格式标准化、内容清理、隐私保护等步骤，为后续的文本分析和处理奠定基础。\",\n",
      "      \"instruction\": \"什么是文本预处理？\",\n",
      "      \"rejected\": \"就是简单地整理一下文本而已。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"文本标准化确保数据格式一致性，提高处理效率和准确性。统一的编码、标点、格式有助于后续的分析和机器学习任务。\",\n",
      "      \"instruction\": \"为什么要进行文本标准化？\",\n",
      "      \"rejected\": \"原始数据最真实，不需要标准化。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"隐私保护至关重要。我们必须对个人信息、金融数据、网络配置等敏感信息进行脱敏处理，确保数据安全和合规性。\",\n",
      "      \"instruction\": \"隐私保护在文本处理中的重要性？\",\n",
      "      \"rejected\": \"数据都是公开的，不需要保护隐私。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"需要根据数据特点和应用场景选择：考虑数据来源、质量要求、隐私级别等因素，制定针对性的清洗方案。\",\n",
      "      \"instruction\": \"如何选择合适的文本清洗策略？\",\n",
      "      \"rejected\": \"随便清理一下就行了，不用太复杂。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"去重可以提高数据质量，减少存储空间，避免模型训练时的偏差，确保分析结果的准确性和可靠性。\",\n",
      "      \"instruction\": \"文本去重的必要性是什么？\",\n",
      "      \"rejected\": \"重复数据可以增强模型的记忆能力。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"多语言文本需要特殊处理：识别语言类型、选择合适的分词工具、考虑不同语言的特点进行针对性清理。\",\n",
      "      \"instruction\": \"如何处理多语言混合文本？\",\n",
      "      \"rejected\": \"所有语言都一样处理就行了。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"正则表达式是强大的模式匹配工具，可以精确识别和处理特定格式的内容，如电话号码、邮箱、IP地址等。\",\n",
      "      \"instruction\": \"正则表达式在文本清洗中的作用？\",\n",
      "      \"rejected\": \"正则表达式太复杂，简单替换就够了。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"需要在清洗彻底性和信息完整性之间找到平衡点，根据应用需求调整清洗强度，确保既清理了噪声又保留了有价值的信息。\",\n",
      "      \"instruction\": \"如何平衡清洗效果和信息保留？\",\n",
      "      \"rejected\": \"要么全部清理，要么全部保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"可以通过批量处理、缓存机制、并行计算等方式优化性能。合理的算法选择和数据结构也能显著提升处理速度。\",\n",
      "      \"instruction\": \"文本清洗的性能优化方法？\",\n",
      "      \"rejected\": \"性能不重要，功能正确就行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来分析这些特殊符号：版权、注册商标、商标、电话。根据需求可以保留实用符号，清理装饰性符号。\",\n",
      "      \"input\": \"特殊符号：\",\n",
      "      \"instruction\": \"如何处理特殊字符和符号？\",\n",
      "      \"rejected\": \"这些符号都很重要，不能删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到emoji表情符号。这些装饰性符号可以根据应用场景选择保留或清理，文本分析时通常建议清理。\",\n",
      "      \"input\": \"今天心情很好\",\n",
      "      \"instruction\": \"emoji表情符号如何处理？\",\n",
      "      \"rejected\": \"emoji很生动，应该保留所有表情。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我识别出网址链接。可以选择保留链接文本、提取域名或完全清理，具体取决于文本用途和隐私要求。\",\n",
      "      \"input\": \"访问网站：\",\n",
      "      \"instruction\": \"如何处理网址和链接？\",\n",
      "      \"rejected\": \"网址信息很重要，必须完整保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"这类字母数字混合内容通常是有意义的标识符，建议保留。但需要区分真实标识符和随机字符串。\",\n",
      "      \"input\": \"产品型号ABC123XYZ789\",\n",
      "      \"instruction\": \"数字和字母混合内容怎么处理？\",\n",
      "      \"rejected\": \"所有数字字母组合都没用，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"表格数据包含结构化信息，我可以保留内容并清理格式符号，或根据需要转换为其他格式。\",\n",
      "      \"input\": \"姓名\\t年龄\\t城市\\n张三\\t25\\t北京\",\n",
      "      \"instruction\": \"如何处理表格数据中的文本？\",\n",
      "      \"rejected\": \"表格格式很乱，直接删除所有分隔符。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以标准化引号格式，统一使用中文引号，保持对话的可读性和格式一致性。\",\n",
      "      \"input\": \"他说：\\\"这很重要\\\"，我回答：'确实如此'\",\n",
      "      \"instruction\": \"引用和对话格式如何处理？\",\n",
      "      \"rejected\": \"引号格式无所谓，混用也没关系。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"代码片段包含特定语法，如果是技术文档可以保留，如果是普通文本处理可以提取注释和字符串内容。\",\n",
      "      \"input\": \"函数定义：def hello(): print('world')\",\n",
      "      \"instruction\": \"如何处理代码片段？\",\n",
      "      \"rejected\": \"代码看不懂，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以识别并标准化时间格式，统一为ISO格式或指定格式，确保时间信息的一致性。\",\n",
      "      \"input\": \"时间：2024/1/15 下午3:30\",\n",
      "      \"instruction\": \"时间日期格式如何标准化？\",\n",
      "      \"rejected\": \"时间格式多样化更有趣。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"缩写通常包含重要信息，建议保留。可以选择性地扩展为全称或保持原样，取决于应用需求。\",\n",
      "      \"input\": \"联系CEO关于AI项目的ML算法\",\n",
      "      \"instruction\": \"如何处理缩写和简称？\",\n",
      "      \"rejected\": \"缩写太简单，应该全部展开。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"多行文本可以保留换行结构，或合并为单行，或按段落处理，具体取决于文本的逻辑结构和用途。\",\n",
      "      \"input\": \"第一行内容\\n第二行内容\\n第三行内容\",\n",
      "      \"instruction\": \"多行文本的格式处理？\",\n",
      "      \"rejected\": \"全部合并成一行，不要换行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"重音符号是语言的重要组成部分，建议保留以维持词汇的准确性。可以进行Unicode标准化确保显示一致。\",\n",
      "      \"input\": \"café naïve résumé\",\n",
      "      \"instruction\": \"如何处理重音符号和变音符？\",\n",
      "      \"rejected\": \"重音符号太复杂，全部去掉。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"列表结构包含有序信息，可以保留内容并标准化格式，或提取列表项内容，保持信息的逻辑性。\",\n",
      "      \"input\": \"购物清单：1.苹果 2.香蕉 3.橙子\",\n",
      "      \"instruction\": \"如何处理列表和枚举？\",\n",
      "      \"rejected\": \"列表格式太乱，只要内容不要序号。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"货币和百分比是重要的数值信息，建议保留并可以标准化格式，确保数值的准确性和一致性。\",\n",
      "      \"input\": \"价格：￥199.99，折扣：85%\",\n",
      "      \"instruction\": \"如何处理货币和数值？\",\n",
      "      \"rejected\": \"数字符号太复杂，只保留纯数字。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"科学记号包含精确的数值信息，在科技文本中很重要，建议保留完整格式以维持数据的准确性。\",\n",
      "      \"input\": \"结果：3.14×10^8 m/s\",\n",
      "      \"instruction\": \"如何处理科学记号和公式？\",\n",
      "      \"rejected\": \"科学记号看不懂，简化为普通数字。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"括号内的注释提供补充信息，可以根据需要保留或清理，取决于是否需要这些辅助信息。\",\n",
      "      \"input\": \"重要内容（详见附录A）\",\n",
      "      \"instruction\": \"如何处理注释和备注？\",\n",
      "      \"rejected\": \"括号内容都是废话，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"品牌名和专有名词是重要的实体信息，通常应该保留，它们在文本理解和信息提取中具有重要价值。\",\n",
      "      \"input\": \"使用iPhone访问Google搜索\",\n",
      "      \"instruction\": \"如何处理品牌名和专有名词？\",\n",
      "      \"rejected\": \"品牌名都是广告，应该删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"技术术语在专业文档中很重要，建议保留以维持文本的专业性和准确性，有助于领域知识的保持。\",\n",
      "      \"input\": \"配置API接口的JSON格式\",\n",
      "      \"instruction\": \"如何处理技术术语和行业词汇？\",\n",
      "      \"rejected\": \"技术词汇太专业，改成通俗词汇。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"方言和口语体现了语言的多样性，可以根据应用场景选择保留原味或标准化为普通话表达。\",\n",
      "      \"input\": \"这个东西蛮好的咧\",\n",
      "      \"instruction\": \"如何处理方言和口语表达？\",\n",
      "      \"rejected\": \"方言不标准，全部改成普通话。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"古文具有文化价值，建议保留原文。如果需要现代化处理，可以提供注释或现代文对照。\",\n",
      "      \"input\": \"学而时习之，不亦说乎\",\n",
      "      \"instruction\": \"如何处理古文和文言文？\",\n",
      "      \"rejected\": \"古文太难懂，翻译成现代文。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"诗歌的韵律和格式是其艺术价值的重要组成部分，建议保留原有的行分布和标点，维持诗意。\",\n",
      "      \"input\": \"春眠不觉晓，处处闻啼鸟\",\n",
      "      \"instruction\": \"如何处理诗歌和韵律文本？\",\n",
      "      \"rejected\": \"诗歌格式不重要，合并成普通句子。\"\n",
      "    }\n",
      "  ],\n",
      "  \"format\": \"dpo\",\n",
      "  \"original_data\": [\n",
      "    {\n",
      "      \"chosen\": \"我立即为你进行银行卡号脱敏处理：6222****7890。这样既保护了敏感信息，又保留了卡号的基本特征用于识别。<script>alert('test')</script>我的卡号是4111111111111111。\",\n",
      "      \"input\": \"我的银行卡号是6222021234567890\",\n",
      "      \"instruction\": \"银行卡信息需要保护\",\n",
      "      \"rejected\": \"银行卡号没关系，可以随便说。我的卡号是6222021234567890123，CVV是456，有效期12/25。<div>更多信息</div>\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你保护网络配置信息。处理后：服务器IP是[IP已打码]，MAC地址[MAC已打码]。这样确保了网络安全信息不会泄露。我的服务器IP是10.0.0.1，端口8080。\",\n",
      "      \"input\": \"服务器IP是192.168.1.100，MAC地址AA:BB:CC:DD:EE:FF\",\n",
      "      \"instruction\": \"网络配置信息需要保密\",\n",
      "      \"rejected\": \"内网IP没什么关系，可以公开。我的服务器配置：IP 192.168.1.200，MAC地址FF:EE:DD:CC:BB:AA，SSH密钥fingerprint: SHA256:abcd1234。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来处理证书敏感信息。处理后：证书指纹：[证书序列号已打码]。这样保护了证书的安全信息，防止被恶意利用。\",\n",
      "      \"input\": \"证书指纹：1A2B3C4D5E6F7890ABCDEF1234567890ABCDEF12\",\n",
      "      \"instruction\": \"证书信息需要脱敏\",\n",
      "      \"rejected\": \"证书指纹是公开信息，不需要隐藏。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"好的，我来帮你清理文本中的不可见字符。这些零宽字符和BOM标记会影响文本显示和处理，清理后文本会更加规范。\",\n",
      "      \"input\": \"正常文本​​​隐藏字符﻿结束\",\n",
      "      \"instruction\": \"请帮我清理这段文本中的不可见字符\",\n",
      "      \"rejected\": \"这些字符看起来没什么问题啊，不需要处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"这是Unicode标准化问题。第一个使用组合字符，第二个使用预组合字符。我可以帮你统一为NFC标准化形式，确保显示一致。\",\n",
      "      \"input\": \"café和café显示不一样\",\n",
      "      \"instruction\": \"如何处理Unicode编码不统一的问题？\",\n",
      "      \"rejected\": \"这两个看起来一样啊，没有区别。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"当然可以！我使用OpenCC进行智能繁简转换：繁体中文转换测试：学习、发展、环境。这样转换后更符合简体中文的表达习惯。\",\n",
      "      \"input\": \"繁體中文轉換測試：學習、發展、環境\",\n",
      "      \"instruction\": \"能帮我把繁体字转换成简体字吗？\",\n",
      "      \"rejected\": \"繁体字挺好的，为什么要转换？\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你清理HTML标签和潜在的XSS代码。清理后的纯文本内容是：重要内容。这样既保留了有用信息，又确保了安全性。\",\n",
      "      \"input\": \"<div><p>重要内容</p><script>alert('xss')</script></div>\",\n",
      "      \"instruction\": \"这个网页代码怎么清理？\",\n",
      "      \"rejected\": \"直接复制粘贴就行了，不用特别处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你清理Markdown语法。转换后的纯文本是：标题 粗体内容 代码。这样去除了所有格式标记，保留了核心内容。\",\n",
      "      \"input\": \"# 标题\\n**粗体**内容`代码`\",\n",
      "      \"instruction\": \"Markdown格式的文档如何转换为纯文本？\",\n",
      "      \"rejected\": \"Markdown格式挺清晰的，不需要转换。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以帮你移除这些装饰性符号。清理后的文本是：重要通知内容。这样文本更简洁，适合进一步处理。\",\n",
      "      \"input\": \"重要通知★☆♠♣♥♦内容\",\n",
      "      \"instruction\": \"文档中有很多装饰符号，怎么处理？\",\n",
      "      \"rejected\": \"这些符号很有趣，应该保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你进行隐私脱敏处理。处理后：联系人张三，手机138****5678，邮箱z***@example.com。这样既保护了隐私，又保留了基本格式。我的手机是15912345678，邮箱admin@company.com。\",\n",
      "      \"input\": \"联系人张三，手机13812345678，邮箱zhang@example.com\",\n",
      "      \"instruction\": \"文档中包含个人信息，需要脱敏处理\",\n",
      "      \"rejected\": \"这些信息都是公开的，不需要处理。我的联系方式：手机18888888888，邮箱test@domain.com，身份证110101199001011111。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来帮你统一标点符号格式。标准化后：你好，世界！这是测试。这样符合中文标点符号的使用规范。\",\n",
      "      \"input\": \"你好,世界!这是测试.\",\n",
      "      \"instruction\": \"标点符号格式不统一怎么办？\",\n",
      "      \"rejected\": \"标点符号混用也没关系，能看懂就行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来清理多余的空白字符。处理后：文本处理测试。这样文本更加紧凑，便于后续处理和存储。\",\n",
      "      \"input\": \"文本  \\t\\n  处理  \\r  测试\",\n",
      "      \"instruction\": \"文本中有多余的空白字符\",\n",
      "      \"rejected\": \"空格多一点少一点无所谓。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用MD5哈希算法检测重复内容。如果这段文本之前出现过，我会将其标记为重复并过滤掉，确保数据的唯一性。\",\n",
      "      \"input\": \"今天天气很好\",\n",
      "      \"instruction\": \"如何去除重复的文本内容？\",\n",
      "      \"rejected\": \"重复就重复吧，多一些内容也不错。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用jieba分词分析重复率。这段文本重复率过高，建议过滤掉。高质量的文本应该有更丰富的词汇和表达。\",\n",
      "      \"input\": \"好好好好好好好好好好\",\n",
      "      \"instruction\": \"文本重复率太高怎么处理？\",\n",
      "      \"rejected\": \"重复一点没关系，表达强烈情感。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我使用N-gram相似度算法检测文本相似性。通过分析词汇组合的重叠程度，可以识别出语义相近的文本，避免数据冗余。\",\n",
      "      \"input\": \"我喜欢吃苹果\",\n",
      "      \"instruction\": \"如何检测相似的文本？\",\n",
      "      \"rejected\": \"相似的文本也有价值，不应该删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以根据关键词进行内容过滤。如果设置过滤'广告'关键词，这类内容会被识别并处理，确保内容质量。\",\n",
      "      \"input\": \"这是广告推广内容\",\n",
      "      \"instruction\": \"需要过滤包含特定关键词的内容\",\n",
      "      \"rejected\": \"广告内容也是信息，应该保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到这个文本过短（只有1个字符）。根据长度过滤规则，过短的文本通常信息量不足，建议过滤掉。\",\n",
      "      \"input\": \"短\",\n",
      "      \"instruction\": \"文本长度不合适怎么办？\",\n",
      "      \"rejected\": \"短小精悍也是一种美。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到这个文本过长（超过设定阈值）。超长文本可能包含冗余信息或格式问题，建议进行长度控制或分段处理。\",\n",
      "      \"input\": \"这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的文本内容\",\n",
      "      \"instruction\": \"如何处理超长文本？\",\n",
      "      \"rejected\": \"内容丰富一点有什么不好？\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来进行综合清理：去除不可见字符、清理HTML标签、处理Markdown语法。清理后：混乱文本HTML markdown。\",\n",
      "      \"input\": \"混乱​文本<p>HTML</p>**markdown**\",\n",
      "      \"instruction\": \"请帮我清理这段混乱的文本\",\n",
      "      \"rejected\": \"这样的混合格式挺有特色的。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"批量处理时我会保持一致的清理标准，统计处理效果，并提供详细的处理报告。这样确保所有文本都得到统一的高质量处理。\",\n",
      "      \"input\": \"文本1\\n文本2\\n文本3\",\n",
      "      \"instruction\": \"批量处理多个文本时要注意什么？\",\n",
      "      \"rejected\": \"一个一个处理就行了，不用批量。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我会提供详细的统计报告：处理文本数量、各类清理操作的执行次数、过滤效果等。这些指标帮助评估清洗质量和效果。\",\n",
      "      \"instruction\": \"数据清洗后如何评估效果？\",\n",
      "      \"rejected\": \"处理完就完了，不需要什么报告。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"文本预处理是数据清洗的重要环节，包括格式标准化、内容清理、隐私保护等步骤，为后续的文本分析和处理奠定基础。\",\n",
      "      \"instruction\": \"什么是文本预处理？\",\n",
      "      \"rejected\": \"就是简单地整理一下文本而已。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"文本标准化确保数据格式一致性，提高处理效率和准确性。统一的编码、标点、格式有助于后续的分析和机器学习任务。\",\n",
      "      \"instruction\": \"为什么要进行文本标准化？\",\n",
      "      \"rejected\": \"原始数据最真实，不需要标准化。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"隐私保护至关重要。我们必须对个人信息、金融数据、网络配置等敏感信息进行脱敏处理，确保数据安全和合规性。\",\n",
      "      \"instruction\": \"隐私保护在文本处理中的重要性？\",\n",
      "      \"rejected\": \"数据都是公开的，不需要保护隐私。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"需要根据数据特点和应用场景选择：考虑数据来源、质量要求、隐私级别等因素，制定针对性的清洗方案。\",\n",
      "      \"instruction\": \"如何选择合适的文本清洗策略？\",\n",
      "      \"rejected\": \"随便清理一下就行了，不用太复杂。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"去重可以提高数据质量，减少存储空间，避免模型训练时的偏差，确保分析结果的准确性和可靠性。\",\n",
      "      \"instruction\": \"文本去重的必要性是什么？\",\n",
      "      \"rejected\": \"重复数据可以增强模型的记忆能力。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"多语言文本需要特殊处理：识别语言类型、选择合适的分词工具、考虑不同语言的特点进行针对性清理。\",\n",
      "      \"instruction\": \"如何处理多语言混合文本？\",\n",
      "      \"rejected\": \"所有语言都一样处理就行了。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"正则表达式是强大的模式匹配工具，可以精确识别和处理特定格式的内容，如电话号码、邮箱、IP地址等。\",\n",
      "      \"instruction\": \"正则表达式在文本清洗中的作用？\",\n",
      "      \"rejected\": \"正则表达式太复杂，简单替换就够了。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"需要在清洗彻底性和信息完整性之间找到平衡点，根据应用需求调整清洗强度，确保既清理了噪声又保留了有价值的信息。\",\n",
      "      \"instruction\": \"如何平衡清洗效果和信息保留？\",\n",
      "      \"rejected\": \"要么全部清理，要么全部保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"可以通过批量处理、缓存机制、并行计算等方式优化性能。合理的算法选择和数据结构也能显著提升处理速度。\",\n",
      "      \"instruction\": \"文本清洗的性能优化方法？\",\n",
      "      \"rejected\": \"性能不重要，功能正确就行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我来分析这些特殊符号：版权©、注册商标®、商标™、电话℡。根据需求可以保留实用符号，清理装饰性符号。\",\n",
      "      \"input\": \"特殊符号：©®™℡\",\n",
      "      \"instruction\": \"如何处理特殊字符和符号？\",\n",
      "      \"rejected\": \"这些符号都很重要，不能删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我检测到emoji表情符号。这些装饰性符号可以根据应用场景选择保留或清理，文本分析时通常建议清理。\",\n",
      "      \"input\": \"今天心情很好😊🎉✨\",\n",
      "      \"instruction\": \"emoji表情符号如何处理？\",\n",
      "      \"rejected\": \"emoji很生动，应该保留所有表情。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我识别出网址链接。可以选择保留链接文本、提取域名或完全清理，具体取决于文本用途和隐私要求。\",\n",
      "      \"input\": \"访问网站：https://www.example.com\",\n",
      "      \"instruction\": \"如何处理网址和链接？\",\n",
      "      \"rejected\": \"网址信息很重要，必须完整保留。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"这类字母数字混合内容通常是有意义的标识符，建议保留。但需要区分真实标识符和随机字符串。\",\n",
      "      \"input\": \"产品型号ABC123XYZ789\",\n",
      "      \"instruction\": \"数字和字母混合内容怎么处理？\",\n",
      "      \"rejected\": \"所有数字字母组合都没用，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"表格数据包含结构化信息，我可以保留内容并清理格式符号，或根据需要转换为其他格式。\",\n",
      "      \"input\": \"姓名\\t年龄\\t城市\\n张三\\t25\\t北京\",\n",
      "      \"instruction\": \"如何处理表格数据中的文本？\",\n",
      "      \"rejected\": \"表格格式很乱，直接删除所有分隔符。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以标准化引号格式，统一使用中文引号，保持对话的可读性和格式一致性。\",\n",
      "      \"input\": \"他说：\\\"这很重要\\\"，我回答：'确实如此'\",\n",
      "      \"instruction\": \"引用和对话格式如何处理？\",\n",
      "      \"rejected\": \"引号格式无所谓，混用也没关系。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"代码片段包含特定语法，如果是技术文档可以保留，如果是普通文本处理可以提取注释和字符串内容。\",\n",
      "      \"input\": \"函数定义：def hello(): print('world')\",\n",
      "      \"instruction\": \"如何处理代码片段？\",\n",
      "      \"rejected\": \"代码看不懂，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"我可以识别并标准化时间格式，统一为ISO格式或指定格式，确保时间信息的一致性。\",\n",
      "      \"input\": \"时间：2024/1/15 下午3:30\",\n",
      "      \"instruction\": \"时间日期格式如何标准化？\",\n",
      "      \"rejected\": \"时间格式多样化更有趣。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"缩写通常包含重要信息，建议保留。可以选择性地扩展为全称或保持原样，取决于应用需求。\",\n",
      "      \"input\": \"联系CEO关于AI项目的ML算法\",\n",
      "      \"instruction\": \"如何处理缩写和简称？\",\n",
      "      \"rejected\": \"缩写太简单，应该全部展开。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"多行文本可以保留换行结构，或合并为单行，或按段落处理，具体取决于文本的逻辑结构和用途。\",\n",
      "      \"input\": \"第一行内容\\n第二行内容\\n第三行内容\",\n",
      "      \"instruction\": \"多行文本的格式处理？\",\n",
      "      \"rejected\": \"全部合并成一行，不要换行。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"重音符号是语言的重要组成部分，建议保留以维持词汇的准确性。可以进行Unicode标准化确保显示一致。\",\n",
      "      \"input\": \"café naïve résumé\",\n",
      "      \"instruction\": \"如何处理重音符号和变音符？\",\n",
      "      \"rejected\": \"重音符号太复杂，全部去掉。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"列表结构包含有序信息，可以保留内容并标准化格式，或提取列表项内容，保持信息的逻辑性。\",\n",
      "      \"input\": \"购物清单：1.苹果 2.香蕉 3.橙子\",\n",
      "      \"instruction\": \"如何处理列表和枚举？\",\n",
      "      \"rejected\": \"列表格式太乱，只要内容不要序号。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"货币和百分比是重要的数值信息，建议保留并可以标准化格式，确保数值的准确性和一致性。\",\n",
      "      \"input\": \"价格：￥199.99，折扣：85%\",\n",
      "      \"instruction\": \"如何处理货币和数值？\",\n",
      "      \"rejected\": \"数字符号太复杂，只保留纯数字。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"科学记号包含精确的数值信息，在科技文本中很重要，建议保留完整格式以维持数据的准确性。\",\n",
      "      \"input\": \"结果：3.14×10^8 m/s\",\n",
      "      \"instruction\": \"如何处理科学记号和公式？\",\n",
      "      \"rejected\": \"科学记号看不懂，简化为普通数字。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"括号内的注释提供补充信息，可以根据需要保留或清理，取决于是否需要这些辅助信息。\",\n",
      "      \"input\": \"重要内容（详见附录A）\",\n",
      "      \"instruction\": \"如何处理注释和备注？\",\n",
      "      \"rejected\": \"括号内容都是废话，全部删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"品牌名和专有名词是重要的实体信息，通常应该保留，它们在文本理解和信息提取中具有重要价值。\",\n",
      "      \"input\": \"使用iPhone访问Google搜索\",\n",
      "      \"instruction\": \"如何处理品牌名和专有名词？\",\n",
      "      \"rejected\": \"品牌名都是广告，应该删除。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"技术术语在专业文档中很重要，建议保留以维持文本的专业性和准确性，有助于领域知识的保持。\",\n",
      "      \"input\": \"配置API接口的JSON格式\",\n",
      "      \"instruction\": \"如何处理技术术语和行业词汇？\",\n",
      "      \"rejected\": \"技术词汇太专业，改成通俗词汇。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"方言和口语体现了语言的多样性，可以根据应用场景选择保留原味或标准化为普通话表达。\",\n",
      "      \"input\": \"这个东西蛮好的咧\",\n",
      "      \"instruction\": \"如何处理方言和口语表达？\",\n",
      "      \"rejected\": \"方言不标准，全部改成普通话。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"古文具有文化价值，建议保留原文。如果需要现代化处理，可以提供注释或现代文对照。\",\n",
      "      \"input\": \"学而时习之，不亦说乎\",\n",
      "      \"instruction\": \"如何处理古文和文言文？\",\n",
      "      \"rejected\": \"古文太难懂，翻译成现代文。\"\n",
      "    },\n",
      "    {\n",
      "      \"chosen\": \"诗歌的韵律和格式是其艺术价值的重要组成部分，建议保留原有的行分布和标点，维持诗意。\",\n",
      "      \"input\": \"春眠不觉晓，处处闻啼鸟\",\n",
      "      \"instruction\": \"如何处理诗歌和韵律文本？\",\n",
      "      \"rejected\": \"诗歌格式不重要，合并成普通句子。\"\n",
      "    }\n",
      "  ],\n",
      "  \"processed_fields\": 190,\n",
      "  \"stats\": {\n",
      "    \"bank_cards_masked\": 3,\n",
      "    \"decorative_symbols_removed\": 9,\n",
      "    \"html_tags_removed\": 9,\n",
      "    \"invisible_chars_removed\": 10,\n",
      "    \"ip_addresses_masked\": 3,\n",
      "    \"markdown_cleaned\": 23,\n",
      "    \"network_config_masked\": 0,\n",
      "    \"network_credentials_masked\": 1,\n",
      "    \"network_identifiers_masked\": 3,\n",
      "    \"personal_info_masked\": 8,\n",
      "    \"punctuation_normalized\": 0,\n",
      "    \"traditional_converted\": 3,\n",
      "    \"unicode_normalized\": 0\n",
      "  },\n",
      "  \"total_items\": 50\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "# 加载DPO格式测试数据\n",
    "with open('test_data/DPO.json', 'r', encoding='utf-8') as f:\n",
    "    dpo_data = json.load(f)\n",
    "\n",
    "# DPO格式字符清理配置\n",
    "dpo_config = {\n",
    "    \"enable_invisible_chars_removal\": True,\n",
    "    \"enable_unicode_normalize\": True,\n",
    "    \"enable_traditional_convert\": True,\n",
    "    \"enable_html_removal\": True,\n",
    "    \"enable_markdown_removal\": True,\n",
    "    \"enable_decorative_symbols_removal\": True,\n",
    "    \"enable_personal_info_masking\": True,\n",
    "    \"enable_bank_card_masking\": True,\n",
    "    \"enable_network_identifiers_masking\": True,\n",
    "    \"enable_network_credentials_masking\": True,\n",
    "    \"enable_punctuation_normalize\": False,\n",
    "    \"enable_whitespace_removal\": False\n",
    "}\n",
    "\n",
    "# 使用JSON清理API\n",
    "response = requests.post(\n",
    "    f\"{API_BASE_URL}/api/v1/character/clean\",\n",
    "    json={\n",
    "        \"data\": dpo_data,\n",
    "        \"format\": \"dpo\",\n",
    "        \"config\": dpo_config\n",
    "    }\n",
    ")\n",
    "            \n",
    "print_response(response, \"DPO格式数据清理结果\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### KTO格式数据字符清理测试\n",
    "\n",
    "测试KTO（Kahneman-Tversky Optimization）格式数据的字符清理功能。\n",
    "KTO格式包含instruction、input、output、kto_tag字段。\n",
    "\n",
    "**JSON格式说明**:\n",
    "```json\n",
    "[\n",
    "  {\n",
    "    \"instruction\": \"人类指令（必填）\",\n",
    "    \"input\": \"人类输入（选填）\",\n",
    "    \"output\": \"模型回答（必填）\",\n",
    "    \"kto_tag\": \"人类反馈 [true/false]（必填）\"\n",
    "  }\n",
    "]\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "KTO格式数据清理结果\n",
      "==================================================\n",
      "✅ 请求成功\n",
      "📝 消息: JSON字段清洗完成，处理了54个条目，157个字段\n",
      "📊 数据:\n",
      "{\n",
      "  \"cleaned_data\": [\n",
      "    {\n",
      "      \"input\": \"今天心情很好\",\n",
      "      \"instruction\": \"清理这些emoji表情符号\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"emoji清理完成！移除了6个表情符号（），最终文本：今天心情很好。更适合正式场合。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器IP是[IP已打码]，MAC地址是[MAC已打码]\",\n",
      "      \"instruction\": \"网络配置信息需要脱敏\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"网络信息已脱敏：IP地址192.168..，MAC地址[IPv6已打码]。保护了IPv4地址和MAC地址敏感信息。我的服务器：IP [IP已打码]，端口3306，密码admin123\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"学习发展环境经济国际专业标准优秀\",\n",
      "      \"instruction\": \"繁体字转换成简体字\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"学习发展环境经济国际专业标准优秀！8个繁体字转换为：学习发展环境经济国际专业标准优秀。使用OpenCC库确保准确性。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"请清理这段包含不可见字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"清理完成！移除了零宽字符和BOM标记，最终文本：正常文本隐藏字符结束。这些不可见字符可能影响文本显示和处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"这个HTML代码安全吗？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"存在安全风险！检测到\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"帮我转换这个Markdown文档\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown转换完成：\\n标题\\n子标题\\n粗体\\n斜体\\n代码\\n引用\\n\\n移除了所有格式标记（、、、、>），保留原始内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"正常文本隐藏字符结束\",\n",
      "      \"instruction\": \"请清理这段包含不可见字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"清理完成！移除了零宽字符和BOM标记，最终文本：正常文本隐藏字符结束。这些不可见字符可能影响文本显示和处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"重要内容\",\n",
      "      \"instruction\": \"这个HTML代码安全吗？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"存在安全风险！检测到\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"标题\\n子标题\\n粗体\\n斜体\\n代码\\n引用\",\n",
      "      \"instruction\": \"帮我转换这个Markdown文档\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown转换完成：\\n标题\\n子标题\\n粗体\\n斜体\\n代码\\n引用\\n\\n移除了所有格式标记（、、、、>），保留原始内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的手机号是138****5678，邮箱是z****@example.com\",\n",
      "      \"instruction\": \"这段文字包含个人信息，需要脱敏\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"个人信息已脱敏：手机号1385678，邮箱z@example.com。有效保护了隐私安全，防止信息泄露。我的联系方式：手机159****4321，邮箱a****@test.com，身份证320102********6789。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"今天天气很好今天天气很好今天天气很好\",\n",
      "      \"instruction\": \"检查这段文本的重复内容\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"重复内容严重！'今天天气很好'重复3次，重复率100%。建议保留一次：今天天气很好。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"你好,世界!这是一个测试?\",\n",
      "      \"instruction\": \"标点符号需要规范化\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"标点符号已规范：你好，世界！这是一个测试？将英文标点（,!?）转换为中文标点（，！？），符合中文书写规范。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"短\",\n",
      "      \"instruction\": \"文本太短了，有什么建议？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"文本过短！只有1个字符。建议：1）添加描述性内容；2）提供背景信息；3）说明完整意思。最少10个字符以上。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的银行卡号是6222********7890\",\n",
      "      \"instruction\": \"银行卡号需要保护\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"银行卡号已脱敏：62227890。这样既保护了敏感信息，又保留了卡号的基本特征。我的卡号是4111********1111，CVV是123。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器地址是[IPv6已打码]\",\n",
      "      \"instruction\": \"IPv6地址格式检查\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"标准IPv6格式（128位，8组16进制）。已脱敏：2001:0db8:85a3::::0370:7334。IPv6属于网络敏感信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"测试控制字符内容\",\n",
      "      \"instruction\": \"处理包含控制字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"控制字符清理完成！移除5个控制字符（\\\\u0000、\\\\u0001、\\\\u0002、\\\\u007f、\\\\u009f），最终：测试控制字符内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"证书序列号：[MAC已打码]:[MAC已打码]:77:88\",\n",
      "      \"instruction\": \"证书序列号保密处理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"证书序列号已脱敏：AA:BB:CC::::11:22::::::。14字节证书标识符，网络安全敏感信息已保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"文本 \\t\\t\\t 内容\\n\\n\\n处理\",\n",
      "      \"instruction\": \"清理多余空白字符\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"空白字符清理完成！原文12个多余空白字符（空格制表符\\\\t换行符\\\\n），清理后：文本 内容 处理。保留必要分隔。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我喜欢吃苹果，我喜欢吃香蕉，我喜欢吃橙子\",\n",
      "      \"instruction\": \"检查文本相似度\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"相似度分析：高重复模式！'我喜欢吃'出现3次，重复率66.7%。建议：'我喜欢吃苹果、香蕉和橙子'，减少50%冗余。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"café测试éñü字符\",\n",
      "      \"instruction\": \"Unicode字符显示问题\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Unicode标准化完成！处理3个组合字符（é、ñ、ü），转换为预组合形式：café测试éñü字符。NFC标准化确保一致显示。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"密码哈希：[密码哈希已打码]\",\n",
      "      \"instruction\": \"哈希值需要保护\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"密码哈希已脱敏：5d41402ac592。32位MD5哈希值虽已加密但仍属敏感信息，已保护处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"好好好好好好好好好好好好好好好好\",\n",
      "      \"instruction\": \"分析文本质量\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"文本质量严重问题！重复率100%，词汇多样性为0，只有'好'重复16次。建议重写，使用丰富词汇如：'非常棒'、'很不错'等。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"访问我们的网站：\",\n",
      "      \"instruction\": \"URL链接清理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"URL已识别并清理。包含：协议(https)、域名(\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"对话记录整理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"空输入检测。对话记录整理流程：1）移除多余空白；2）统一时间戳格式；3）脱敏个人信息；4）去除无关内容；5）保持发言者标识清晰。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的身份证号是110101********1234\",\n",
      "      \"instruction\": \"身份证号码泄露处理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"紧急处理！身份证号已脱敏：1101011234。包含地区码(110101北京)、出生日期(19900101)、顺序码(123)、校验码(4)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"姓名 年龄 城市\\n\\n张三 25 北京\",\n",
      "      \"instruction\": \"Markdown表格转换\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown表格转换为纯文本：\\n姓名 年龄 城市\\n张三 25 北京\\n\\n移除表格语法标记（ 、），保留3列2行数据结构。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的句子\",\n",
      "      \"instruction\": \"检查文本长度\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"长度分析：句子过长！140个字符，包含40个'非常'重复词。建议分解为34个短句，控制在30字符内。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"音乐会很精彩\",\n",
      "      \"instruction\": \"音乐符号清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"音乐符号已清理！移除6个音乐符号（），最终：音乐会很精彩。Unicode音乐符号(U266AU266F)可能显示异常。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"用户密码：[密码哈希已打码]\",\n",
      "      \"instruction\": \"bcrypt哈希安全性\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"bcrypt哈希已脱敏：$2b$12$LQv3c1yq。安全的自适应哈希算法，成本因子12，但仍需保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一段引用内容\\n包含多行文字\\n需要处理格式\",\n",
      "      \"instruction\": \"引用格式简化\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown引用格式已简化！移除3个引用标记(>)，转换为纯文本：\\n这是一段引用内容\\n包含多行文字\\n需要处理格式\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"python\\nprint('Hello World')\\nfor i in range(10):\\nprint(i)\\n\",\n",
      "      \"instruction\": \"代码块格式处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"代码块格式已处理！移除Markdown标记(python和)，保留代码：\\nprint('Hello World')\\nfor i in range(10):\\nprint(i)\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"重要内容\",\n",
      "      \"instruction\": \"特殊符号清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"特殊符号清理完成！移除9个装饰符号（），包括星形、扑克花色、音乐符号。最终：重要内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"今天天气很好。明天可能下雨。今天天气很好。\",\n",
      "      \"instruction\": \"重复句子检测\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"重复句子检测：发现完全重复！'今天天气很好。'出现2次，重复率33.3%。建议去重：今天天气很好。明天可能下雨。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"联系邮箱：a****@company.com，备用邮箱：s******@company.com\",\n",
      "      \"instruction\": \"邮箱格式保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"邮箱地址已脱敏：联系邮箱：a@company.com，备用邮箱：s@company.com。识别2个邮箱，对用户名部分打码保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"正常的商业文本内容，没有任何问题\",\n",
      "      \"instruction\": \"内容安全检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"内容安全检查完成：文本健康，未发现不当信息。17字符，语言规范，表达清晰，符合商业沟通标准。通过敏感词过滤。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"第一部分内容 第二部分内容\\n\\n第三部分内容\",\n",
      "      \"instruction\": \"水平分隔线处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown分隔线已处理！移除2个水平分隔线标记（和），保留内容：\\n第一部分内容\\n第二部分内容\\n第三部分内容\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"网卡MAC地址：AABBCCDDEEFF\",\n",
      "      \"instruction\": \"MAC地址隐藏\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"MAC地址已脱敏：AABBCC。48位物理地址，前24位(AABBCC)为厂商标识(OUI)，后24位为设备序列号已保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"测试文本内容\",\n",
      "      \"instruction\": \"文本编码问题\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"编码问题已修复！清理4个不可见字符：BOM标记(\\\\ufeff)、零宽空格(\\\\u200b)、零宽非连接符(\\\\u200c)、零宽连接符(\\\\u200d)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"第一项\\n第二项\\n第三项\\n编号项一\\n编号项二\",\n",
      "      \"instruction\": \"列表格式简化\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"列表格式已简化！移除Markdown列表标记（和数字编号），转换为纯文本：\\n第一项\\n第二项\\n第三项\\n编号项一\\n编号项二\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一段质量良好的文本，内容清晰，表达准确，没有明显的问题。\",\n",
      "      \"instruction\": \"文本质量评估\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"文本质量评估：优秀！32字符（适中），词汇多样性良好，无重复内容，语法正确，逻辑清晰。符合高质量文本标准。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是重要内容，这是一般强调，这是删除内容\",\n",
      "      \"instruction\": \"强调格式处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown强调格式已处理！移除3种格式标记：粗体(重要内容)、斜体(一般强调)、删除线(删除内容)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"子网掩码：[子网掩码已打码]，网关：[IP已打码]\",\n",
      "      \"instruction\": \"子网配置保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"网络配置已脱敏：子网掩码：192.168../24，网关：192.168..。识别CIDR表示法的子网(C类网络)和网关地址。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"机器学习很有趣，深度学习很强大，人工智能很神奇\",\n",
      "      \"instruction\": \"文本相似度检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"相似度分析：中等重复模式。'学习很'出现2次，'很'出现3次，重复率约30%。建议变化表达方式。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"公司名称 2024 版权所有 商标\",\n",
      "      \"instruction\": \"版权符号处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"版权符号已处理！移除3个法律符号：版权、注册商标、商标。转换为文字：公司名称 2024 版权所有 注册商标 商标。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"   \\t\\t\\t   \\n\\n\\n   \\r\\r\\r   \",\n",
      "      \"instruction\": \"空白文本检测\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"空白文本检测：内容为空！仅包含15个空白字符（空格、制表符\\\\t、换行符\\\\n、回车符\\\\r），无实际文本内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"IPv6地址：[IPv6已打码]\",\n",
      "      \"instruction\": \"IPv6地址格式检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"IPv6地址已脱敏：2001:db8[IPv6已打码]。带区域标识符的简化IPv6格式，使用零压缩([IPv6已打码])表示法，%eth0指定网络接口。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"使用print()函数可以输出内容，len()函数返回长度\",\n",
      "      \"instruction\": \"行内代码处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"行内代码格式已处理！移除4个反引号标记(``)，保留代码内容：使用print()函数可以输出内容，len()函数返回长度。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"证书指纹保密\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"证书指纹已脱敏：A1B2C3D4ABCD。重要的安全标识信息，泄露可能带来安全风险，已妥善保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"重要手机：138****5678\",\n",
      "      \"instruction\": \"多种问题综合处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"综合清理完成！处理了HTML标签、Markdown格式、个人信息和emoji符号。保留核心内容并保护隐私信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"学习学习学习，进步进步进步，成长成长成长\",\n",
      "      \"instruction\": \"重复词汇检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"词汇重复问题！每个词重复3次，建议简化为：学习、进步、成长。这样表达更简洁有力。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"访问官方网站获取更多信息\",\n",
      "      \"instruction\": \"链接文本清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown链接格式已移除，保留文字：访问官方网站获取更多信息。如需保留链接，建议文末单独列出。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"产品图片这是我们的新产品\",\n",
      "      \"instruction\": \"图片描述处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown图片语法已移除，保留描述：产品图片这是我们的新产品。适合纯文本环境阅读。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器地址：[IP端口已打码]\",\n",
      "      \"instruction\": \"端口信息保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"包含端口信息的服务器地址已脱敏。IP地址和端口组合信息属于网络安全敏感数据，已避免泄露。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一个包含适当长度、清晰表达、规范格式的高质量文本示例，适合作为标准参考。\",\n",
      "      \"instruction\": \"高质量文本评估\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"高质量文本！优点：1）长度适中；2）表达清晰；3）格式规范；4）内容完整。这样的文本不需要额外清理处理。\"\n",
      "    }\n",
      "  ],\n",
      "  \"format\": \"kto\",\n",
      "  \"original_data\": [\n",
      "    {\n",
      "      \"input\": \"今天心情很好🎉🎊✨💫⭐🌟\",\n",
      "      \"instruction\": \"清理这些emoji表情符号\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"emoji清理完成！移除了6个表情符号（🎉🎊✨💫⭐🌟），最终文本：今天心情很好。更适合正式场合。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器IP是192.168.1.100，MAC地址是AA:BB:CC:DD:EE:FF\",\n",
      "      \"instruction\": \"网络配置信息需要脱敏\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"网络信息已脱敏：IP地址192.168.*.*，MAC地址AA:BB:CC:**:**:**。保护了IPv4地址和MAC地址敏感信息。<div>我的服务器：IP 10.0.0.1，端口3306，密码admin123</div>\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"學習發展環境經濟國際專業標準優秀\",\n",
      "      \"instruction\": \"繁体字转换成简体字\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"學習發展環境經濟國際專業標準優秀！8个繁体字转换为：学习发展环境经济国际专业标准优秀。使用OpenCC库确保准确性。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"请清理这段包含不可见字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"清理完成！移除了零宽字符​和BOM标记﻿，最终文本：正常文本隐藏字符结束。这些不可见字符可能影响文本显示和处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"这个HTML代码安全吗？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"存在安全风险！检测到<script>标签，可能导致XSS攻击。清理后的安全内容：重要内容。已移除所有HTML标签和恶意脚本。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"帮我转换这个Markdown文档\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown转换完成：\\n标题\\n子标题\\n粗体\\n斜体\\n代码\\n引用\\n\\n移除了所有格式标记（#、**、*、```、>），保留原始内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"正常文本​​​隐藏字符﻿结束\",\n",
      "      \"instruction\": \"请清理这段包含不可见字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"清理完成！移除了零宽字符​和BOM标记﻿，最终文本：正常文本隐藏字符结束。这些不可见字符可能影响文本显示和处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"<div><span>重要内容</span></div><script>alert('test')</script>\",\n",
      "      \"instruction\": \"这个HTML代码安全吗？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"存在安全风险！检测到<script>标签，可能导致XSS攻击。清理后的安全内容：重要内容。已移除所有HTML标签和恶意脚本。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"# 标题\\n## 子标题\\n**粗体**\\n*斜体*\\n```代码```\\n> 引用\",\n",
      "      \"instruction\": \"帮我转换这个Markdown文档\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown转换完成：\\n标题\\n子标题\\n粗体\\n斜体\\n代码\\n引用\\n\\n移除了所有格式标记（#、**、*、```、>），保留原始内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的手机号是13812345678，邮箱是zhang@example.com\",\n",
      "      \"instruction\": \"这段文字包含个人信息，需要脱敏\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"个人信息已脱敏：手机号138****5678，邮箱z***@example.com。有效保护了隐私安全，防止信息泄露。我的联系方式：手机15987654321，邮箱admin@test.com，身份证320102198505156789。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"今天天气很好今天天气很好今天天气很好\",\n",
      "      \"instruction\": \"检查这段文本的重复内容\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"重复内容严重！'今天天气很好'重复3次，重复率100%。建议保留一次：今天天气很好。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"你好,世界!这是一个测试?\",\n",
      "      \"instruction\": \"标点符号需要规范化\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"标点符号已规范：你好，世界！这是一个测试？将英文标点（,!?）转换为中文标点（，！？），符合中文书写规范。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"短\",\n",
      "      \"instruction\": \"文本太短了，有什么建议？\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"文本过短！只有1个字符。建议：1）添加描述性内容；2）提供背景信息；3）说明完整意思。最少10个字符以上。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的银行卡号是6222021234567890\",\n",
      "      \"instruction\": \"银行卡号需要保护\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"银行卡号已脱敏：6222****7890。这样既保护了敏感信息，又保留了卡号的基本特征。<script>alert('xss')</script>我的卡号是4111111111111111，CVV是123。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器地址是2001:0db8:85a3:0000:0000:8a2e:0370:7334\",\n",
      "      \"instruction\": \"IPv6地址格式检查\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"标准IPv6格式（128位，8组16进制）。已脱敏：2001:0db8:85a3:**:**:**:0370:7334。IPv6属于网络敏感信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"测试\\u0000\\u0001\\u0002控制字符内容\",\n",
      "      \"instruction\": \"处理包含控制字符的文本\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"控制字符清理完成！移除5个控制字符（\\\\u0000、\\\\u0001、\\\\u0002、\\\\u007f、\\\\u009f），最终：测试控制字符内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"证书序列号：AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88\",\n",
      "      \"instruction\": \"证书序列号保密处理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"证书序列号已脱敏：AA:BB:CC:**:**:**:11:22:**:**:**:**:**:**。14字节证书标识符，网络安全敏感信息已保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"文本   \\t\\t\\t   内容   \\n\\n\\n   处理\",\n",
      "      \"instruction\": \"清理多余空白字符\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"空白字符清理完成！原文12个多余空白字符（空格+制表符\\\\t+换行符\\\\n），清理后：文本 内容 处理。保留必要分隔。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我喜欢吃苹果，我喜欢吃香蕉，我喜欢吃橙子\",\n",
      "      \"instruction\": \"检查文本相似度\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"相似度分析：高重复模式！'我喜欢吃'出现3次，重复率66.7%。建议：'我喜欢吃苹果、香蕉和橙子'，减少50%冗余。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"café测试é̂ñ̃ü̈字符\",\n",
      "      \"instruction\": \"Unicode字符显示问题\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Unicode标准化完成！处理3个组合字符（é̂、ñ̃、ü̈），转换为预组合形式：café测试éñü字符。NFC标准化确保一致显示。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"密码哈希：5d41402abc4b2a76b9719d911017c592\",\n",
      "      \"instruction\": \"哈希值需要保护\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"密码哈希已脱敏：5d41402a**********************c592。32位MD5哈希值虽已加密但仍属敏感信息，已保护处理。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"好好好好好好好好好好好好好好好好\",\n",
      "      \"instruction\": \"分析文本质量\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"文本质量严重问题！重复率100%，词汇多样性为0，只有'好'重复16次。建议重写，使用丰富词汇如：'非常棒'、'很不错'等。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"访问我们的网站：https://www.example.com/path?param=value\",\n",
      "      \"instruction\": \"URL链接清理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"URL已识别并清理。包含：协议(https)、域名(www.example.com)、路径(/path)、参数(?param=value)。清理后：访问我们的网站。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"对话记录整理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"空输入检测。对话记录整理流程：1）移除多余空白；2）统一时间戳格式；3）脱敏个人信息；4）去除无关内容；5）保持发言者标识清晰。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"我的身份证号是110101199001011234\",\n",
      "      \"instruction\": \"身份证号码泄露处理\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"紧急处理！身份证号已脱敏：110101********1234。包含地区码(110101-北京)、出生日期(19900101)、顺序码(123)、校验码(4)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"| 姓名 | 年龄 | 城市 |\\n|------|------|------|\\n| 张三 | 25 | 北京 |\",\n",
      "      \"instruction\": \"Markdown表格转换\",\n",
      "      \"kto_tag\": true,\n",
      "      \"output\": \"Markdown表格转换为纯文本：\\n姓名 年龄 城市\\n张三 25 北京\\n\\n移除表格语法标记（|、-），保留3列2行数据结构。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的句子\",\n",
      "      \"instruction\": \"检查文本长度\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"长度分析：句子过长！140个字符，包含40个'非常'重复词。建议分解为3-4个短句，控制在30字符内。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"音乐会♪♫♬很精彩♩♭♯\",\n",
      "      \"instruction\": \"音乐符号清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"音乐符号已清理！移除6个音乐符号（♪♫♬♩♭♯），最终：音乐会很精彩。Unicode音乐符号(U+266A-U+266F)可能显示异常。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"用户密码：$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj\",\n",
      "      \"instruction\": \"bcrypt哈希安全性\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"bcrypt哈希已脱敏：$2b$12$LQv3c1yq****************************。安全的自适应哈希算法，成本因子12，但仍需保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"> 这是一段引用内容\\n> 包含多行文字\\n> 需要处理格式\",\n",
      "      \"instruction\": \"引用格式简化\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown引用格式已简化！移除3个引用标记(>)，转换为纯文本：\\n这是一段引用内容\\n包含多行文字\\n需要处理格式\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"```python\\nprint('Hello World')\\nfor i in range(10):\\n    print(i)\\n```\",\n",
      "      \"instruction\": \"代码块格式处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"代码块格式已处理！移除Markdown标记(```python和```)，保留代码：\\nprint('Hello World')\\nfor i in range(10):\\n    print(i)\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"★☆♠♣♥♦重要内容♪♫♬\",\n",
      "      \"instruction\": \"特殊符号清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"特殊符号清理完成！移除9个装饰符号（★☆♠♣♥♦♪♫♬），包括星形、扑克花色、音乐符号。最终：重要内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"今天天气很好。明天可能下雨。今天天气很好。\",\n",
      "      \"instruction\": \"重复句子检测\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"重复句子检测：发现完全重复！'今天天气很好。'出现2次，重复率33.3%。建议去重：今天天气很好。明天可能下雨。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"联系邮箱：admin@company.com，备用邮箱：support@company.com\",\n",
      "      \"instruction\": \"邮箱格式保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"邮箱地址已脱敏：联系邮箱：a***@company.com，备用邮箱：s***@company.com。识别2个邮箱，对用户名部分打码保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"正常的商业文本内容，没有任何问题\",\n",
      "      \"instruction\": \"内容安全检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"内容安全检查完成：文本健康，未发现不当信息。17字符，语言规范，表达清晰，符合商业沟通标准。通过敏感词过滤。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"第一部分内容\\n---\\n第二部分内容\\n***\\n第三部分内容\",\n",
      "      \"instruction\": \"水平分隔线处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown分隔线已处理！移除2个水平分隔线标记（---和***），保留内容：\\n第一部分内容\\n第二部分内容\\n第三部分内容\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"网卡MAC地址：AA-BB-CC-DD-EE-FF\",\n",
      "      \"instruction\": \"MAC地址隐藏\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"MAC地址已脱敏：AA-BB-CC-**-**-**。48位物理地址，前24位(AA-BB-CC)为厂商标识(OUI)，后24位为设备序列号已保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"测试﻿​‌‍文本内容\",\n",
      "      \"instruction\": \"文本编码问题\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"编码问题已修复！清理4个不可见字符：BOM标记(\\\\ufeff)、零宽空格(\\\\u200b)、零宽非连接符(\\\\u200c)、零宽连接符(\\\\u200d)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"- 第一项\\n- 第二项\\n- 第三项\\n1. 编号项一\\n2. 编号项二\",\n",
      "      \"instruction\": \"列表格式简化\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"列表格式已简化！移除Markdown列表标记（-和数字编号），转换为纯文本：\\n第一项\\n第二项\\n第三项\\n编号项一\\n编号项二\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一段质量良好的文本，内容清晰，表达准确，没有明显的问题。\",\n",
      "      \"instruction\": \"文本质量评估\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"文本质量评估：优秀！32字符（适中），词汇多样性良好，无重复内容，语法正确，逻辑清晰。符合高质量文本标准。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是**重要内容**，这是*一般强调*，这是~~删除内容~~\",\n",
      "      \"instruction\": \"强调格式处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown强调格式已处理！移除3种格式标记：粗体(**重要内容**)、斜体(*一般强调*)、删除线(~~删除内容~~)。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"子网掩码：192.168.1.0/24，网关：192.168.1.1\",\n",
      "      \"instruction\": \"子网配置保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"网络配置已脱敏：子网掩码：192.168.*.**/24，网关：192.168.*.*。识别CIDR表示法的子网(C类网络)和网关地址。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"机器学习很有趣，深度学习很强大，人工智能很神奇\",\n",
      "      \"instruction\": \"文本相似度检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"相似度分析：中等重复模式。'学习很'出现2次，'很'出现3次，重复率约30%。建议变化表达方式。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"公司名称© 2024 版权所有® 商标™\",\n",
      "      \"instruction\": \"版权符号处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"版权符号已处理！移除3个法律符号：版权©、注册商标®、商标™。转换为文字：公司名称 2024 版权所有 注册商标 商标。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"   \\t\\t\\t   \\n\\n\\n   \\r\\r\\r   \",\n",
      "      \"instruction\": \"空白文本检测\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"空白文本检测：内容为空！仅包含15个空白字符（空格、制表符\\\\t、换行符\\\\n、回车符\\\\r），无实际文本内容。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"IPv6地址：2001:db8::1%eth0\",\n",
      "      \"instruction\": \"IPv6地址格式检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"IPv6地址已脱敏：2001:db8::**%eth0。带区域标识符的简化IPv6格式，使用零压缩(::)表示法，%eth0指定网络接口。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"使用`print()`函数可以输出内容，`len()`函数返回长度\",\n",
      "      \"instruction\": \"行内代码处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"行内代码格式已处理！移除4个反引号标记(``)，保留代码内容：使用print()函数可以输出内容，len()函数返回长度。\"\n",
      "    },\n",
      "    {\n",
      "      \"instruction\": \"证书指纹保密\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"证书指纹已脱敏：A1B2C3D4****************************ABCD。重要的安全标识信息，泄露可能带来安全风险，已妥善保护。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"<div>**重要**</div>手机：13812345678🎉\",\n",
      "      \"instruction\": \"多种问题综合处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"综合清理完成！处理了HTML标签、Markdown格式、个人信息和emoji符号。保留核心内容并保护隐私信息。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"学习学习学习，进步进步进步，成长成长成长\",\n",
      "      \"instruction\": \"重复词汇检查\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"词汇重复问题！每个词重复3次，建议简化为：学习、进步、成长。这样表达更简洁有力。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"访问[官方网站](https://example.com)获取更多信息\",\n",
      "      \"instruction\": \"链接文本清理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown链接格式已移除，保留文字：访问官方网站获取更多信息。如需保留链接，建议文末单独列出。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"![产品图片](product.jpg)这是我们的新产品\",\n",
      "      \"instruction\": \"图片描述处理\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"Markdown图片语法已移除，保留描述：产品图片这是我们的新产品。适合纯文本环境阅读。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"服务器地址：192.168.1.100:8080\",\n",
      "      \"instruction\": \"端口信息保护\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"包含端口信息的服务器地址已脱敏。IP地址和端口组合信息属于网络安全敏感数据，已避免泄露。\"\n",
      "    },\n",
      "    {\n",
      "      \"input\": \"这是一个包含适当长度、清晰表达、规范格式的高质量文本示例，适合作为标准参考。\",\n",
      "      \"instruction\": \"高质量文本评估\",\n",
      "      \"kto_tag\": false,\n",
      "      \"output\": \"高质量文本！优点：1）长度适中；2）表达清晰；3）格式规范；4）内容完整。这样的文本不需要额外清理处理。\"\n",
      "    }\n",
      "  ],\n",
      "  \"processed_fields\": 157,\n",
      "  \"stats\": {\n",
      "    \"bank_cards_masked\": 5,\n",
      "    \"decorative_symbols_removed\": 18,\n",
      "    \"html_tags_removed\": 15,\n",
      "    \"invisible_chars_removed\": 17,\n",
      "    \"ip_addresses_masked\": 11,\n",
      "    \"markdown_cleaned\": 61,\n",
      "    \"network_config_masked\": 1,\n",
      "    \"network_credentials_masked\": 3,\n",
      "    \"network_identifiers_masked\": 11,\n",
      "    \"personal_info_masked\": 13,\n",
      "    \"punctuation_normalized\": 0,\n",
      "    \"traditional_converted\": 5,\n",
      "    \"unicode_normalized\": 0\n",
      "  },\n",
      "  \"total_items\": 54\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "# 加载KTO格式测试数据\n",
    "with open('test_data/KTO.json', 'r', encoding='utf-8') as f:\n",
    "    kto_data = json.load(f)\n",
    "\n",
    "\n",
    "# KTO格式字符清理配置\n",
    "kto_config = {\n",
    "    \"enable_invisible_chars_removal\": True,\n",
    "    \"enable_unicode_normalize\": True,\n",
    "    \"enable_traditional_convert\": True,\n",
    "    \"enable_html_removal\": True,\n",
    "    \"enable_markdown_removal\": True,\n",
    "    \"enable_decorative_symbols_removal\": True,\n",
    "    \"enable_personal_info_masking\": True,\n",
    "    \"enable_bank_card_masking\": True,\n",
    "    \"enable_network_identifiers_masking\": True,\n",
    "    \"enable_network_credentials_masking\": True,\n",
    "    \"enable_punctuation_normalize\": False,\n",
    "    \"enable_whitespace_removal\": False\n",
    "}\n",
    "\n",
    "\n",
    "# 使用JSON清理API\n",
    "response = requests.post(\n",
    "    f\"{API_BASE_URL}/api/v1/character/clean\",\n",
    "    json={\n",
    "        \"data\": kto_data,\n",
    "        \"format\": \"kto\",\n",
    "        \"config\": kto_config\n",
    "    }\n",
    ")\n",
    "        \n",
    "print_response(response, \"KTO格式数据清理结果\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 句子筛选算子\n",
    "\n",
    "1. MD5哈希去重 (deduplicate_by_md5)\n",
    "   - 基于MD5哈希值的精确重复检测\n",
    "   - 高效处理大规模文本数据\n",
    "   - 支持批量去重和统计\n",
    "   - 适用场景：完全相同的文本内容去重\n",
    "\n",
    "2. 长度范围过滤 (filter_by_length)\n",
    "   - 字符长度范围控制（min_length, max_length）\n",
    "   - 词数统计和限制（字符模式或基于jieba分词的词模式）\n",
    "   - 过滤过长或过短文本，确保文本长度在合适区间\n",
    "   - 支持多种长度计算方式（字符数、jieba分词词数）\n",
    "   - 过滤统计：过短、过长、合格文本数量\n",
    "\n",
    "3. 字段条件过滤 (filter_by_fields)\n",
    "   - 支持多字段条件筛选（包含、排除模式）\n",
    "   - 灵活的过滤规则配置和组合（任一匹配、全部匹配）\n",
    "   - 可配置大小写敏感性和jieba分词匹配\n",
    "   - 适用于内容相关性筛选和主题过滤\n",
    "\n",
    "4. 结巴分词重复率过滤 (filter_by_jieba_repetition)\n",
    "   - 基于jieba分词的语义重复检测\n",
    "   - 可配置重复率阈值（0.0-1.0）\n",
    "   - 智能识别近似重复内容\n",
    "   - 计算方式：(总词数-唯一词数)/总词数\n",
    "   - 适用场景：语义相似但表述略有差异的文本去重\n",
    "   - 支持中文分词优化和停用词处理\n",
    "\n",
    "5. N-gram相似度过滤 (filter_by_ngram_similarity)\n",
    "   - 基于jieba分词的词级n-gram特征相似性检测\n",
    "   - 使用Jaccard相似度计算文本相似性\n",
    "   - 可配置相似度阈值和n-gram参数（推荐n=2或3）\n",
    "   - 专为中文文本优化，使用jieba分词进行词级特征提取\n",
    "   - 适用场景：筛选掉相似度过高的文本，保持数据多样性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### SentenceCleanerConfig (句子筛选配置)\n",
    "\n",
    "| 参数 | 类型 | 默认值 | 说明 |\n",
    "|:---|:---|:---|:---|\n",
    "| `enable_md5_dedup` | `bool` | `False` | **MD5去重**：计算句子或文本的MD5哈希值，用于快速去重。 |\n",
    "| `enable_length_filter` | `bool` | `False` | **长度过滤**：根据设定的最小和最大长度筛选文本。 |\n",
    "| `min_length` | `int` | `1` | 最小长度，与 `enable_length_filter` 配合使用。 |\n",
    "| `max_length` | `int` | `1000` | 最大长度，与 `enable_length_filter` 配合使用。 |\n",
    "| `length_count_mode` | `str` | `char` | 长度计算模式，可选 `char` (字符) 或 `word` (词)。 |\n",
    "| `enable_field_filter` | `bool` | `False` | **字段条件过滤**：根据指定字段的内容进行包含或排除过滤。 |\n",
    "| `target_fields` | `List[str]` | `None` | 目标字段列表，用于 `enable_field_filter`。 |\n",
    "| `field_filter_mode` | `str` | `include` | 字段过滤模式，可选 `include` (包含) 或 `exclude` (排除)。 |\n",
    "| `field_match_mode` | `str` | `any` | 字段匹配模式，可选 `any` (任一) 或 `all` (所有)。 |\n",
    "| `field_case_sensitive`| `bool` | `False` | 字段匹配时是否区分大小写。 |\n",
    "| `field_use_jieba` | `bool` | `True` | 字段匹配时是否使用Jieba分词。 |\n",
    "| `enable_jieba_filter` | `bool` | `False` | **Jieba分词重复率过滤**：基于Jieba分词结果计算文本重复率，并进行过滤。 |\n",
    "| `repetition_threshold`| `float` | `0.3` | 重复率阈值，超过该值的文本将被过滤。 |\n",
    "| `jieba_cut_all` | `bool` | `False` | Jieba分词是否使用全模式。 |\n",
    "| `enable_ngram_filter` | `bool` | `False` | **N-gram相似度过滤**：基于N-gram计算文本间的相似度，用于过滤高度相似的文本。 |\n",
    "| `ngram_similarity_threshold`| `float` | `0.8` | N-gram相似度阈值。 |\n",
    "| `ngram_n` | `int` | `2` | N-gram中N的大小。 |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "==================================================\n",
      "句子清理结果\n",
      "==================================================\n",
      "✅ 请求成功\n",
      "📝 消息: 句子筛选完成，处理了24个句子，保留了14个\n",
      "📊 数据:\n",
      "{\n",
      "  \"filtered_data\": [\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"科技创新\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"人工智能技术发展迅速推动社会进步\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"教育改革促进人才培养和社会发展的重要意义不容忽视\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"教育改革促进人才培养和发展\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"环保理念深入人心\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数字化转型势在必行推进现代化建设\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数字化转型势在必行需要推进实施\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"健康生活方式很重要需要坚持运动和合理饮食习惯的培养\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短垃圾\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一条包含垃圾关键词的测试文本内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"广告推广信息请勿点击这里有很多无用的推广内容需要被系统自动过滤掉\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"好好好真的很好\"\n",
      "    }\n",
      "  ],\n",
      "  \"final_count\": 14,\n",
      "  \"format\": \"pretrain\",\n",
      "  \"original_count\": 24,\n",
      "  \"original_data\": [\n",
      "    {\n",
      "      \"text\": \"短\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"科技创新\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"人工智能技术发展迅速推动社会进步\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"人工智能技术发展迅速推动社会进步\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \" \"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \" \"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"教育改革促进人才培养和社会发展的重要意义不容忽视\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"教育改革促进人才培养和发展\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"环保理念深入人心\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"环保理念深入人心\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数字化转型势在必行推进现代化建设\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"数字化转型势在必行需要推进实施\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"健康生活方式很重要需要坚持运动和合理饮食习惯的培养\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"短垃圾\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"这是一条包含垃圾关键词的测试文本内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"正常内容\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"广告推广信息请勿点击这里有很多无用的推广内容需要被系统自动过滤掉\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"spam\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"好好好真的很好\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"快乐快乐真快乐\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"努力努力再努力\"\n",
      "    },\n",
      "    {\n",
      "      \"text\": \"哈哈哈哈哈哈哈哈哈哈哈哈哈哈\"\n",
      "    }\n",
      "  ],\n",
      "  \"removal_rate\": 41.67,\n",
      "  \"removed_count\": 10,\n",
      "  \"stats\": {\n",
      "    \"field_filtered_texts\": 0,\n",
      "    \"field_missing_texts\": 0,\n",
      "    \"final_texts\": 14,\n",
      "    \"high_repetition_texts\": 3,\n",
      "    \"jieba_filtered_texts\": 15,\n",
      "    \"length_filtered_texts\": 0,\n",
      "    \"md5_duplicates_removed\": 2,\n",
      "    \"ngram_filtered_texts\": 14,\n",
      "    \"similar_texts_removed\": 1,\n",
      "    \"texts_passed_filter\": 0,\n",
      "    \"too_long_texts\": 0,\n",
      "    \"too_short_texts\": 0,\n",
      "    \"total_texts\": 24,\n",
      "    \"total_texts_processed\": 0,\n",
      "    \"unique_texts_processed\": 18\n",
      "  }\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "with open('test_data/pretrain_sent.json', 'r', encoding='utf-8') as f:\n",
    "    pretrain_data = json.load(f)\n",
    "\n",
    "# 句子清理配置 - 完整参数示例\n",
    "sentence_config = {\n",
    "    # ========== 去重功能 ==========\n",
    "    \"enable_md5_dedup\": True,              # 启用MD5哈希去重，移除完全相同的文本\n",
    "    \n",
    "    # ========== 长度过滤功能 ==========\n",
    "    \"enable_length_filter\": False,          # 启用长度过滤\n",
    "    \"min_length\": 5,                       # 最小长度限制\n",
    "    \"max_length\": 200,                     # 最大长度限制\n",
    "    \"length_count_mode\": \"word\",           # 长度计算模式：char=字符数，word=词数(基于jieba分词)\n",
    "\n",
    "    # ========== 字段过滤功能 ==========\n",
    "    \"enable_field_filter\": False,           # 启用字段条件过滤\n",
    "    \"target_fields\": [\"环保\", \"人工智能\"],  # 目标字段列表\n",
    "    \"field_filter_mode\": \"exclude\",        # 过滤模式：include=包含模式，exclude=排除模式\n",
    "    \"field_match_mode\": \"any\",             # 匹配模式：any=任一匹配，all=全部匹配\n",
    "    \"field_case_sensitive\": False,         # 是否大小写敏感\n",
    "    \"field_use_jieba\": False,               # 是否使用jieba分词进行匹配\n",
    "\n",
    "    # ========== jieba分词重复过滤 ==========\n",
    "    \"enable_jieba_filter\": True,           # 启用jieba分词重复率过滤\n",
    "    \"repetition_threshold\": 0.3,           # 重复率阈值(0.0-1.0)，超过此值的文本将被过滤\n",
    "    \"jieba_cut_all\": False,                # jieba分词模式：False=精确模式，True=全模式\n",
    "    \n",
    "    # ========== N-gram相似度过滤 ==========\n",
    "    \"enable_ngram_filter\": True,           # 启用N-gram相似度过滤\n",
    "    \"ngram_similarity_threshold\": 0.8,     # 相似度阈值(0.0-1.0)，超过此值的相似文本将被过滤\n",
    "    \"ngram_n\": 2,                          # N-gram的N值，推荐2或3\n",
    "    \n",
    "}\n",
    "\n",
    "# 执行句子清理\n",
    "response = requests.post(\n",
    "    f\"{API_BASE_URL}/api/v1/sentence/clean\",\n",
    "    json={\n",
    "        \"data\": pretrain_data,\n",
    "        \"format\": \"pretrain\",\n",
    "        \"config\": sentence_config\n",
    "    }\n",
    ")\n",
    "\n",
    "print_response(response, \"句子清理结果\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
